/*
 * AcessoBD.java
 *
 * Created on 18 de Maio de 2007, 17:10
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package pt.iscte.dcti.es.rhplus.sistema.persistencia;

import java.sql.*;
import java.util.*;

/**
 * Classe para testar o acesso a uma BD relacional com recurso a um ficheiro de
 * texto do tipo '.properties' que guarda todos os comandos SQL, o que permite
 * separar realmente o codigo JAVA do codigo SQL
 * 
 */
public class AcessoBD {
	Connection ligacao;
	// instancia de SQLCache guardar� as strings que representam comandos SQL
	SQLCache cache;
	Statement statement;

	/**
	 * Construtor que carrega as intrucoes SQL do ficheiro de properties para o
	 * atributo 'cache' (instancia de SQLCache)
	 */
	public AcessoBD() {
		cache = new SQLCache();
		cache.loadSQLStatements();
	}

	/**
	 * Carrega o driver MySQL e abre a Connection em localhost, sem utilizar
	 * password.
	 */
	public void carregaDriverEAbreLigacao() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {

		Class.forName("com.mysql.jdbc.Driver").newInstance();
		ligacao = DriverManager.getConnection("jdbc:mysql://localhost:3306/rhplus", "root", "");

		statement = ligacao.createStatement();
	}

	/**
	 * Fecha uma Connection.
	 */
	public void fechaLigacao() {
		try {
			statement.close();
			ligacao.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	/**
	 * Metodo que executa uma query com recurso as classes auxiliares SQLCache e
	 * ResultSet.
	 * 
	 * @throws SQLException
	 */
	public ResultSet executaSelect(String qryName, Hashtable params) throws SQLException {
		// instancia de ResultSet que ira guardar o resultado da query
		ResultSet result_set = null;

		String query = cache.compileQuery(qryName, params);
		result_set = statement.executeQuery(query);

		return result_set;
	}

	public void executaUpdate(String qryName, Hashtable params) throws SQLException {

		String query = cache.compileQuery(qryName, params);
		statement.executeUpdate(query);

	}
}
